package edu.czjtu.dao;


import edu.czjtu.model.pojo.Blog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
@Mapper
public interface BlogDao {

    /**
     * 保存新闻
     *
     * @param blog
     */
    void saveBlog(Blog blog);

    /**
     * 保存新闻标签
     *
     * @param blogId
     * @param tagId
     */
    void saveBlogTag(@Param("blogId") Integer blogId, @Param("tagId") Integer tagId);

    /**
     * 根据id查询新闻
     *
     * @param blogId
     * @return
     */
    Blog findBlogById(Integer blogId);

    /**
     * 根据用户id查询新闻
     *
     * @param id
     * @return
     */
    List<Blog> findBlogByUserId(@Param("id") Integer id, @Param("start") Integer start, @Param("showCount") Integer showCount);


    /**
     * 查询该用户的新闻数量
     * 正常状态
     *
     * @return
     */
    Long getBlogCountByUserId(Integer id);

    /**
     * 查询主页新闻数量
     *
     * @return
     */
    Long getHomeBlogCount();

    /**
     * 查询主页新闻
     *
     * @param start
     * @param showCount
     * @return
     */
    List<Blog> findHomeBlog(@Param("start") Integer start, @Param("showCount") Integer showCount);

    /**
     * 查询好友新闻数量
     *
     * @return
     */
    Long getFriendBlogCount(Integer userId);

    /**
     * 查询好友新闻
     *
     * @param start
     * @param showCount
     * @return
     */
    List<Blog> findFriendBlog(@Param("userId") Integer userId,@Param("start") Integer start, @Param("showCount") Integer showCount);

    /**
     * 查询热门新闻
     *
     * @param count 显示数量
     * @return
     */
    List<Blog> findHotBlog(Integer count);

    /**
     * 搜索新闻标题，内容
     *
     * @param searchText
     * @param start
     * @param showCount
     * @return
     */
    List<Blog> searchBlog(@Param("search") String searchText,
                          @Param("tagId") String tagId,
                          @Param("start") Integer start,
                          @Param("showCount") Integer showCount);

    /**
     * 查询所有新闻
     *
     * @param start
     * @param showCount
     * @return
     */
    List<Blog> findAllblog(@Param("start") Integer start, @Param("showCount") Integer showCount);


    /**
     * 符合关键词的新闻数量
     *
     * @param searchText
     * @return
     */
    Long getSearchBlogCount(@Param("search")String searchText,@Param("tagId")String tagId);

    /**
     * 符合关键字的新闻数量
     * 所有状态
     *
     * @param searchText
     * @return
     */
    Long getSearchAllBlogCount(String searchText);

    /**
     * 搜索新闻
     * 所有状态
     *
     * @param searchText
     * @param start
     * @param showCount
     * @return
     */
    List<Blog> searchAllBlog(@Param("searchText") String searchText, @Param("start") Integer start, @Param("showCount") Integer showCount);

    /**
     * 按月份归档新闻
     *
     * @param count 最近几个月
     * @return month 月
     * year 年
     * count 数量
     */
    List<Map> statisticalBlogByMonth(Integer count);


    /**
     * 查询此标签下是否有新闻
     *
     * @param tagId
     * @return
     */
    Integer findBlogCountByTagId(Integer tagId);

    /**
     * 查询新闻记录数
     * 所有状态
     *
     * @return
     */
    Long getAllBlogCount();


    /**
     * 根据新闻id更新新闻
     *
     * @param blog
     */
    void updateBlog(Blog blog);

    /**
    * @Description: 更新新闻点赞数
    * @Param: [blogId, count]
    * @return: void
    * @Author: Tyson
    * @Date:
    */
    void updateLikeCount(Integer blogId, Integer count);

    /**
    * @Description: 根据用户id获取新闻点赞数
    * @Param: [blogId]
    * @return: java.lang.Integer
    * @Author: Tyson
    *
    */
    Integer getBlogLikeCountByBlogId(Integer blogId);

    Integer findAllblogByTime(String time);
}
